package br.com.android.financas.model;

import java.io.Serializable;
import java.util.Date;

import org.joda.time.DateTime;
import org.joda.time.Interval;

import br.com.android.financas.helper.FieldName;

import com.j256.ormlite.dao.ForeignCollection;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable
public class Categoria extends EntidadeAbstrata implements Comparable<Categoria>{
	private static final long serialVersionUID = 4099087164618337505L;

	@DatabaseField(generatedId = true)
	private Integer id;

	@DatabaseField(unique=true,canBeNull=false,width=20)
	@FieldName(fieldName="nome")
	private String nome;

	@DatabaseField(canBeNull=false)
	@FieldName(fieldName="picker")
	private int cor;

	@ForeignCollectionField(eager=false)
	private ForeignCollection<Despesa> despesas;

	private double totalDespesas=0;

	public Categoria() {
	}


	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getCor() {
		return cor;
	}

	public void setCor(int cor) {
		this.cor = cor;
	}

	public Serializable getId() {
		return id;
	}

	public ForeignCollection<Despesa> getDespesas() {
		return despesas;
	}

	public void setDespesas(ForeignCollection<Despesa> despesas) {
		this.despesas = despesas;
	}

	public double getTotalDespesas() {
		totalDespesas=0;
		for(Despesa despesa:despesas){
			totalDespesas+=despesa.getValor();
		}

		return totalDespesas;
	}


	public double getTotalDespesas(Date mes) {
		totalDespesas=0;
		DateTime m=new DateTime(mes.getTime());

		DateTime ini=m.dayOfMonth().withMinimumValue();
		DateTime fim=m.dayOfMonth().withMaximumValue();

		Interval intervalo=new Interval(ini,fim);

		for(Despesa despesa:despesas){
			if(intervalo.contains(despesa.getData().getTime()))
				totalDespesas+=despesa.getValor();
		}

		return totalDespesas;
	}


	@Override
	public int compareTo(Categoria another) {
		return getNome().compareTo(another.getNome());
	}

}
